package com.ocean.web.util;

import java.io.File;

/**
 * 文件/文件夹操作工具类
 */
public class FileDirUtils {

    /**
     * 关键方法：判断文件夹是否存在，不存在则创建（支持多级文件夹）
     * @param dirPath 文件夹路径（绝对路径/相对路径均可）
     * @return true：文件夹已存在或创建成功；false：创建失败（权限不足、路径非法等）
     */
    public static boolean createDirIfNotExists(String dirPath) {
        // 1. 校验路径合法性
        if (dirPath == null || dirPath.trim().isEmpty()) {
            System.err.println("文件夹路径不能为空！");
            return false;
        }

        // 2. 转换为 File 对象（兼容 Windows 反斜杠、Linux 正斜杠）
        String normalizedPath = dirPath.replace("\\", "/"); // 统一路径分隔符
        File dir = new File(normalizedPath);

        // 3. 判断是否已存在且是文件夹
        if (dir.exists()) {
            if (dir.isDirectory()) {
                // 文件夹已存在，直接返回成功
                System.out.printf("文件夹已存在：%s%n", dir.getAbsolutePath());
                return true;
            } else {
                // 路径存在但不是文件夹（是文件），创建失败
                System.err.printf("路径已存在但不是文件夹：%s%n", dir.getAbsolutePath());
                return false;
            }
        }

        // 4. 不存在则创建（mkdirs() 支持多级文件夹，mkdir() 仅支持单级）
        boolean createSuccess = dir.mkdirs(); // 关键方法：创建多级文件夹
        if (createSuccess) {
            System.out.printf("文件夹创建成功：%s%n", dir.getAbsolutePath());
            return true;
        } else {
            // 创建失败（可能原因：权限不足、路径非法、磁盘满等）
            System.err.printf("文件夹创建失败：%s%n", dir.getAbsolutePath());
            return false;
        }
    }

    // ---------------------- 扩展方法（可选）----------------------
    /**
     * 从文件路径中提取文件夹路径（如：E:/a/b/c.txt → E:/a/b）
     * 用于创建文件的父文件夹
     * @param filePath 文件完整路径
     * @return 父文件夹路径
     */
    public static String extractParentDirPath(String filePath) {
        if (filePath == null || filePath.trim().isEmpty()) {
            return "";
        }
        String normalizedPath = filePath.replace("\\", "/");
        int lastSlashIndex = normalizedPath.lastIndexOf("/");
        if (lastSlashIndex == -1) {
            // 无文件夹路径（如：c.txt），返回当前目录（.）
            return ".";
        }
        return normalizedPath.substring(0, lastSlashIndex);
    }

    /**
     * 创建文件的父文件夹（如：要保存 E:/a/b/c.txt，先创建 E:/a/b）
     * @param filePath 文件完整路径
     * @return true：父文件夹创建成功/已存在；false：失败
     */
    public static boolean createParentDirIfNotExists(String filePath) {
        String parentDirPath = extractParentDirPath(filePath);
        return createDirIfNotExists(parentDirPath);
    }
}